package com.coocaa.ops.admin.v1.plugin.provider;

import com.coocaa.ops.admin.v1.panel.biz.IPanelInfoBiz;
import com.coocaa.ops.admin.v1.panel.biz.impl.PanelInfoBizImpl;
import com.coocaa.ops.admin.v1.plugin.biz.IPluginInfoBiz;
import com.coocaa.ops.common.core.biz.panel.entity.PanelInfoEntity;
import com.coocaa.ops.common.core.biz.plugin.entity.PluginInfoEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author tangminghong
 * @date 2020-07-15
 */
@Service
public class PluginUpdateProviderImpl implements IPluginUpdateProvider {

    @Autowired
    private IPluginInfoBiz pluginInfoBiz;

    /**
     * 新增或更新插件信息，返回插件id，用于关联关系保存
     *
     * @param plugin
     * @param panelId
     * @param panelVersion
     * @return
     */
    @Override
    public void savePanelPluginInfo(PluginInfoEntity plugin, Integer panelId, Integer panelVersion) {
        Integer pluginSelfId = addOrUpdatePluginInfo(plugin);
        pluginInfoBiz.getMapper().updatePanelPluginId(panelId, panelVersion, pluginSelfId);
    }

    @Override
    public void saveTabPluginInfo(PluginInfoEntity plugin, Integer tabId, Integer tabVersion) {
        Integer pluginSelfId = addOrUpdatePluginInfo(plugin);
        pluginInfoBiz.getMapper().updateTabPluginId(tabId, tabVersion, pluginSelfId);
    }

    @Override
    public Integer addOrUpdatePluginInfo(PluginInfoEntity plugin) {
        PluginInfoEntity oldPlugin = pluginInfoBiz.getPluginByModuleTypeAndPluginId(plugin.getModuleType(), plugin.getPluginId());
        if (oldPlugin != null) {
            plugin.setId(oldPlugin.getId());
            updatePluginById(plugin);
            return oldPlugin.getId();
        } else {
            return addPlugin(plugin);
        }

    }

    private void updatePluginById(PluginInfoEntity plugin) {
        pluginInfoBiz.updateById(plugin);
    }

    private Integer addPlugin(PluginInfoEntity plugin) {
        pluginInfoBiz.add(plugin);
        return plugin.getId();
    }

    private void updatePanelPluginId(Integer panelId, Integer panelVersion, Integer pluginSelfId) {
        pluginInfoBiz.getMapper().updatePanelPluginId(panelId, panelVersion, pluginSelfId);
    }
}
